﻿Imports MySql.Data.MySqlClient

Public Class frmUsuarioModificacion

    Private Sub frmUsuarioModificacion_Load(sender As Object, e As EventArgs) Handles MyBase.Load

        cn.CargarCombo(cboRango, "Select id As Id,name As Nombre From roles Order By Name", True, False)

        'Cargo datos
        Dim Resultados As MySql.Data.MySqlClient.MySqlDataReader
        Dim cmd As New MySql.Data.MySqlClient.MySqlCommand
        sqlModificacion = "SELECT username, email, password, nombre, apellido, telefono, skype, r.Name As Rango, activo"
        sqlModificacion = sqlModificacion & " FROM users u LEFT JOIN roles r ON u.rango = r.Id"
        sqlModificacion = sqlModificacion & " WHERE username ='" & varUcUsuarios.dgvUsuarios.SelectedRows(0).Cells("usuario").Value & "'"
        cmd.CommandText = sqlModificacion
        'cmd.CommandType = CommandType.Text
        Resultados = cn.getResultados(cmd)

        Resultados.Read()

        If Resultados.HasRows Then
            txtUsuario.Text = Resultados.Item("username")
            txtEmail.Text = Resultados.Item("email")
            txtClave.Text = Resultados.Item("password")
            txtNombre.Text = Resultados.Item("nombre")
            txtApellido.Text = Resultados.Item("apellido")
            txtTelefono.Text = Resultados.Item("telefono")
            txtSkype.Text = Resultados.Item("skype")
            If Not IsDBNull(Resultados.Item("rango")) Then
                cboRango.Text = Resultados.Item("rango")
            End If
            chkActivo.Checked = Resultados.Item("activo")

            Resultados.Close()
            cn.Cerrar()
        End If

    End Sub

    Private Sub btnGuardar_Click(sender As Object, e As EventArgs) Handles btnGuardar.Click
        Try
            If Validar() = False Then
                Exit Sub
            End If

            sql = "UPDATE users SET username=@username, email=@email, password=@password, nombre=@nombre, apellido=@apellido, telefono=@telefono, skype=@skype, rango=@rango, Activo=@Activo WHERE id=" & varUcUsuarios.dgvUsuarios.SelectedRows(0).Cells("id").Value
            Dim cmd As New MySql.Data.MySqlClient.MySqlCommand(sql)

            cmd.Parameters.Add("@username", MySqlDbType.VarChar, 50, "username")
            cmd.Parameters.Add("@email", MySqlDbType.VarChar, 50, "email")
            cmd.Parameters.Add("@password", MySqlDbType.VarChar, 50, "password")
            cmd.Parameters.Add("@nombre", MySqlDbType.VarChar, 50, "nombre")
            cmd.Parameters.Add("@apellido", MySqlDbType.VarChar, 50, "apellido")
            cmd.Parameters.Add("@telefono", MySqlDbType.VarChar, 50, "telefono")
            cmd.Parameters.Add("@skype", MySqlDbType.VarChar, 50, "skype")
            'cmd.Parameters.Add("@Clave", MySqlDbType.VarBinary, 100, "Clave")
            cmd.Parameters.Add("@rango", MySqlDbType.Int32, 4, "rango")
            cmd.Parameters.Add("@activo", MySqlDbType.Bit, 1, "activo")

            ''Convierto la clave en un array de tipo byte
            'Dim sStr As String = txtClave.Text.Trim
            'Dim enc As New System.Text.ASCIIEncoding()
            'Dim bArray() As Byte = enc.GetBytes(sStr)

            'cmd.Parameters("@IdUsuario").Value = MaxIdUsuario + 1
            cmd.Parameters("@username").Value = txtUsuario.Text.Trim
            cmd.Parameters("@email").Value = txtEmail.Text.Trim
            cmd.Parameters("@password").Value = txtClave.Text.Trim
            cmd.Parameters("@Nombre").Value = txtNombre.Text.Trim
            cmd.Parameters("@apellido").Value = txtApellido.Text.Trim
            cmd.Parameters("@telefono").Value = txtTelefono.Text.Trim
            cmd.Parameters("@skype").Value = txtSkype.Text.Trim
            'cmd.Parameters("@Clave").Value = bArray
            cmd.Parameters("@rango").Value = cboRango.SelectedValue
            cmd.Parameters("@activo").Value = chkActivo.Checked

            cn.ExecNonQuery(cmd)

            DatosGuardadosCorrectamente()

            Me.Close()
            Me.Dispose()

        Catch ex As Exception
            MensajeError()
        End Try
    End Sub

    Private Function Validar() As Boolean

        If txtUsuario.Text.Trim = "" Then
            MsgBox("Debe ingresar una usuario", MsgBoxStyle.OkOnly + MsgBoxStyle.Exclamation, "Atención")
            txtUsuario.Focus()
            Return False
        End If

        Dim cmd As New MySql.Data.MySqlClient.MySqlCommand("Select username From users Where username='" & Trim(txtUsuario.Text.Trim) & "' and id <> " & varUcUsuarios.dgvUsuarios.SelectedRows(0).Cells("id").Value)
        If Not IsNothing(cn.getScalar(cmd)) Then
            MsgBox("El usuario ingresado ya existe", MsgBoxStyle.Exclamation + MsgBoxStyle.OkOnly, "Atención")
            txtUsuario.Focus()
            Return False
        End If

        If txtClave.Text.Trim = "" Then
            MsgBox("Debe ingresar una clave", MsgBoxStyle.OkOnly + MsgBoxStyle.Exclamation, "Atención")
            txtClave.Focus()
            Return False
        End If

        If txtEmail.Text.Trim <> "" And General.General.ValidarEmail(txtEmail.Text.Trim) = False Then
            MsgBox("Debe ingresar un email válido", MsgBoxStyle.OkOnly + MsgBoxStyle.Exclamation, "Atención")
            txtEmail.Focus()
            Return False
        End If

        If txtNombre.Text.Trim = "" Then
            MsgBox("Debe ingresar un nombre", MsgBoxStyle.OkOnly + MsgBoxStyle.Exclamation, "Atención")
            txtNombre.Focus()
            Return False
        End If

        If txtApellido.Text.Trim = "" Then
            MsgBox("Debe ingresar un apellido", MsgBoxStyle.OkOnly + MsgBoxStyle.Exclamation, "Atención")
            txtApellido.Focus()
            Return False
        End If

        If txtEmail.Text.Trim <> "" Then
            cmd = New MySql.Data.MySqlClient.MySqlCommand("Select email From users Where email='" & Trim(txtEmail.Text.Trim) & "' and id <> " & varUcUsuarios.dgvUsuarios.SelectedRows(0).Cells("id").Value)
            If Not IsNothing(cn.getScalar(cmd)) Then
                MsgBox("El email ingresado ya existe", MsgBoxStyle.Exclamation + MsgBoxStyle.OkOnly, "Atención")
                txtEmail.Focus()
                Return False
            End If
        End If

        If cboRango.SelectedIndex = 0 Then
            MsgBox("Debe seleccionar un Rango", MsgBoxStyle.OkOnly + MsgBoxStyle.Exclamation, "Atención")
            cboRango.Focus()
            Return False
        End If

        Return True

    End Function


End Class